package com.castle.fortress.admin.study.course.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.castle.fortress.admin.member.dto.MemberDto;
import com.castle.fortress.admin.study.course.entity.StudyCourseEntity;
import com.castle.fortress.admin.study.course.dto.StudyCourseDto;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.Map;
import java.util.List;

/**
 * 课程管理 服务类
 *
 * @author castle
 * @since 2023-01-30
 */
public interface StudyCourseService extends IService<StudyCourseEntity> {

    /**
     * 分页展示课程管理列表
     * @param page
     * @param studyCourseDto
     * @return
     */
    IPage<StudyCourseDto> pageStudyCourse(Page<StudyCourseDto> page, StudyCourseDto studyCourseDto);

	/**
	 * 分页展示课程管理扩展列表
	 * @param page
	 * @param studyCourseDto
	 * @return
	 */
	IPage<StudyCourseDto> pageStudyCourseExtends(Page<StudyCourseDto> page, StudyCourseDto studyCourseDto);
	/**
	 * 课程管理扩展详情
	 * @param id 课程管理id
	 * @return
	 */
    StudyCourseDto getByIdExtends(Long id);

    /**
     * 展示课程管理列表
     * @param studyCourseDto
     * @return
     */
    List<StudyCourseDto> listStudyCourse(StudyCourseDto studyCourseDto);

	/**
	 * 修改课程相关信息
	 * @param id 课程id
	 * @param type 00 是否置顶 01 课程状态 02 推荐状态
	 * @param val 最新值
	 * @return
	 */
    boolean updateOpt(Long id, String type, String val);

	/**
	 * 用户学习的课程及进度
	 * @param studyCourseDto
	 * @param member
	 * @return
	 */
	List<StudyCourseDto> scheduleList(StudyCourseDto studyCourseDto, MemberDto member);
	List<StudyCourseDto> finishList(StudyCourseDto studyCourseDto, MemberDto member);

	/**
	 * 用户学习的课程详情
	 * @param id
	 * @param memberId
	 * @return
	 */
	StudyCourseDto studyInfo(Long id,Long memberId);

	/**
	 * 会员收藏课程列表
	 * @param memberId
	 * @return
	 */
    List<StudyCourseDto> collectList(Long memberId);

	/**
	 * 删除指定分类（及下属分类）下的资源
	 * @param id
	 */
	void delByClassifyId(Long id);

	IPage<StudyCourseDto> memberStudyPage(Page<StudyCourseDto> page, StudyCourseDto studyCourseDto);

	void updateAllStatus(Long courseId, Integer courseStatus, Integer isRecommend);
}
